05.Bash String
Table of Contents
基本属性
Bash 所有代码除关键字外大部分变量默认为字符串
$ command="date"
$ $command # 取 command 变量值 "date", "date" 作为命令执行
> Mon Jun 12 10:07:40 CST 2023 # 执行 date, 打印日期
$ echo date # date 被当作字符串, 作为 echo 的参数
> date
$ echo $("date") # 执行 "date", 返回值作为 echo 的参数
> Mon Jun 12 10:23:46 CST 2023
间接引用
${!var}
获取变量 var 的值, 并作为变量名引用
$ name="petter" # 定义变量 name, 值为 petter
$ key="name" # 定义变量 key, 值为 name
$ echo ${!key} # 使用 key 的值作为变量名, 并对该变量取值
> petter # 打印变量 petter
$ cmd="date"
$ var="cmd"
$ ${!var} # 获取变量 var 对应的变量名, 并对该变量取值
> 2023年12月24日 星期日 12时50分38秒 CST # 变量值 date 作为命令执行, 打印日期
Bash 默认第一个字符为指令, 后续值为字符串作为指令的参数
使用 $(command)
方式, 将字符串作为命令执行
长度
${#s}
返回字符串的长度
$ s="123 456"; s="456 123" # 赋值
$ echo "s:${s} length: ${#s}" # 获取长度
> s:456 123 length: 7 # 打印
大小写
${variable^^}
字母全替换为大写
${variable,,}
字母全替换为小写
$ var="ABC123xyz"
$ echo ${var^^}
> ABC123XYZ
$ echo ${var,,}
> abc123xyz
筛选
$ echo "num: 22 index: 4" | grep -oE "[0-9]+" # 筛选
> 22 4
$ echo $(ifconfig) | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"
> 127.0.0.1
> 192.168.1.100
删除和替换
字符串通过 #
(开头开始匹配) %
(结尾开始匹配) 完成删除操作
最短匹配: ${variable#pattern}
${variable%pattern}
贪婪匹配:${variable##pattern}
${variable%%pattern}
字符串通过 /
(替换一次) //
(全替换) 完成替换操作
替换: ${variable/pattern/string}
${variable//pattern/string}
$ date="2023-07-31"
$ echo ${date#*-} ${date##*-} # # 从开头开始匹配, 只匹配最短内容 ## 贪婪匹配
> 07-31 31
$ echo ${date%-*} ${date%%-*} # % 从结尾开始匹配, 只匹配最短内容 %% 贪婪匹配
> 2023-07 2023
$ echo ${date/-/=} # 只替换一次
> 2024=07-31
$ echo ${date//-/=} # 全替换
> 2023=07=01
$ echo “num 1123 num” | sed 's/[0-9]//g' # 删除全部数字
> num num
$ echo “abcdef” | sed 's/[a-z]/0/g' # 字母全部替换为数字
> 000000
子字符串
${s:start:length}
$ s="01234"
$ echo "${s:0:3}" # 从序号 0 开始, 获取 3 个长度
> 012
定位
expr index $string regex
, 序号从 1 开始
$ expr index "abcdef" "c"
> 2